iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0

Flask 函式庫 ( 模組 ) 是一個輕量級的 Web 應用框架,提供了包括路由 ( Routes )、樣板 ( templates ) 和權限 ( authorization) 等功能,只需要簡單的幾行程式碼,就能輕鬆架設網站或建構網路服務。

安裝 Flask 函式庫

$pip install Flask

import Flask

from flask import Flask

建立第一個網頁服務

  • 使用 @app.route 建立路由時,預設使用「GET」方法來處理請求,但可以透過 methods 參數來指定使用 GET 或 POST 方法。
    • GET:
      • 用於取得資料:通常用來從伺服器請求並獲取資料,例如加載網頁或取得 API 資料。
      • 資料在網址中傳送:GET 請求的資料會附在 URL 的查詢參數中(例如 ?key=value),這些資料在瀏覽器網址中可見。
    • POST:
      • 用於提交資料:通常用來向伺服器發送資料,例如提交表單、上傳文件或進行登錄。
      • 資料在請求體中傳送:POST 請求的資料會在 HTTP 請求的主體中傳送,不會顯示在 URL 中,因此更適合傳送敏感信息。
  • 透過 @app.route,您可以設定特定的網址路徑,當使用者訪問這些網址時,會執行對應的函式並返回結果。

以下的程式碼範例展示了如何設定三個不同的路由,每個路由對應不同的結果,當您訪問這些網址時,會看到三種不同的頁面內容。

from flask import Flask      # 從 Flask 模組中載入 Flask 類別,用來建立 Flask 應用程式

app = Flask(__name__)        # 建立 Flask 應用程式物件,將當前的模組名稱 (__name__) 傳遞給 Flask 類別,這樣 Flask 才能知道程式的根目錄,方便後續尋找資源和模板

@app.route("/")              # 使用裝飾器為根路徑(即 "http://localhost:5000/" 或 "http://127.0.0.1:5000/")設定路由,當使用者訪問此路徑時,會調用下面定義的 home() 函式
def home():                  # 定義 home 函式,這個函式會在訪問根路徑時執行
    return "<h1>hello</h1>"  # 返回一段 HTML 字串作為響應,這段 HTML 將顯示為一個 "hello" 標題

@app.route("/one")           # 為路徑 "/one" 設定路由,當使用者訪問 "http://localhost:5000/one" 時,會調用 ok() 函式
def one():                   # 定義 one 函式,這個函式會在訪問 "/one" 路徑時執行
    return "<h1>one</h1>"    # 返回一段 HTML 字串作為響應,這段 HTML 將顯示為一個 "one" 標題

@app.route("/two")           # 為路徑 "/two" 設定路由,當使用者訪問 "http://localhost:5000/two" 時,會調用 yes() 函式
def two():                   # 定義 two 函式,這個函式會在訪問 "/two" 路徑時執行
    return "<h1>two</h1>"    # 返回一段 HTML 字串作為響應,這段 HTML 將顯示為一個 "two" 標題

app.run()                    # 執行

設定連線埠號 port

使用 app.run 執行時,可以透過設定 port 參數來指定埠號,或者將 host 設定為 0.0.0.0,這樣 Flask 會使用本機的實際 IP 作為網址。以下的程式碼執行後,將會生成類似 192.168.XXX.XXX:8080 的網址。

from flask import Flask

app = Flask(__name__)

@app.route("/")
def home():
    return "<h1>hello world</h1>"

app.run(host="0.0.0.0", port=8080)

圖示

https://ithelp.ithome.com.tw/upload/images/20240831/20168345HD0604SEpu.png

註冊路由

除了固定的導向位址,URL 也可以成為函式接收的參數

from flask import Flask

app = Flask(__name__)

@app.route('/<name>', methods=['GET'])    # 訪問 : http://127.0.0.1:5000/HIHIHI
def Name(name):
    print("type(name) : ", type(name))    # 打印 : type(name) : <class 'str'>
    return 'String => {}'.format(name)    # 網頁 : String => HIHIHI

app.run()                    

圖示

https://ithelp.ithome.com.tw/upload/images/20240831/20168345J75jWcXG2E.png

使用網頁樣板

透過 Flask 建立的網頁服務,不僅可以在網頁上顯示特定的文字,還可以使用 render_template 方法來呈現網頁模板。只要在程式中載入這個方法,就能顯示位於「同一層的 templates 資料夾」中的網頁模板。以下是一個基本的網頁模板,它能讀取並顯示傳入的 name 參數的內容。

<!DOCTYPE html>
<html>
<head>
  <title>TRY</title>
</head>
<body>
  {% if name %}
  <h1>Hello {{ name }}!</h1>
  {% else %}
  <h1>Hello, World!</h1>
  {% endif %}
</body>
</html>

網頁樣板完成後,執行下方的程式,只要網址具有 name 的參數,就會透過網頁樣板顯示在網頁中。

from flask import Flask, request, render_template  

app = Flask(__name__)  

@app.route('/')  
def home():
    
    # 當使用者以 GET 方法訪問該路徑時,request.args 會將 URL 中的參數以 tuple 格式讀取
    # 使用 get() 方法獲取 'name' 參數的值,如果參數不存在則返回 None
    name = request.args.get('name')
    
    # 將 name 參數傳遞給模板以供顯示
    return render_template('try.html', name=name)

app.run()  # 啟動 Flask 應用程式,預設會在本機的 http://127.0.0.1:5000/ 運行

Flask 應用程式的一個典型基本資料夾架構

my_flask_app/
├── app/
│   ├── static/      # 靜態文件夾,包含 CSS、JavaScript 和圖像等靜態資源
│   │   ├── css/
│   │   ├── js/
│   │   └── images/
│   └── templates/   # 模板文件夾,包含 HTML 模板
│       ├── layout.html
│       ├── home.html
│       └── about.html
└── main.py

參考資料 :
https://steam.oxxostudio.tw/category/python/example/flask.html
https://ithelp.ithome.com.tw/articles/10258223?sc=pt


上一篇
[Python] 查詢電腦 Private IP 與 Public IP
下一篇
[Python] 連線MySQL資料庫
系列文
一些Python可以做的事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言